import pandas as pd

from common.handleExcel import read_countycode_2countyname_city, read_excel_to_dataframe, slice_colum_from_dataframe, \
    move_column, save_to_excel, move_column_to_end, move_column_to_pre


# 获取电子监管号匹配实际管理区Excel文件(电子监管号	实际管理区)
# 获取实际管理区匹配设区市(实际管理区	设区市)
#-----电子监管号 实际管理区  设区市
def get_part21_epc2county2city(url4Epc2Conty, sheetName4Epc2Conty,
                        url4Conty2City, sheetName4Conty2City):
    url4Epc2Conty = fr"{url4Epc2Conty}"
    url4Conty2City = fr"{url4Conty2City}"
    df4Epc2Conty = read_excel_to_dataframe(url4Epc2Conty, sheetName4Epc2Conty)
    df4Conty2City = read_excel_to_dataframe(url4Conty2City, sheetName4Conty2City)
    mergedf =  pd.merge(df4Epc2Conty, df4Conty2City, on='实际管理区', how='left')
    return  mergedf

#epc2county2cityTable(电子监管号 实际管理区  设区市)
def get_part21_list_by_epc2county2city(epc2county2cityTable,
                                       url4List,sheetName4List):

    url4List = fr"{url4List}"

    #清单表(电子监管号	合同编号 	合同名称	供应面积	约定（变更）动工时间)
    listTable = read_excel_to_dataframe(url4List, sheet_name=sheetName4List)
    listTable.columns = listTable.columns.str.strip()
    # 检查并删除“设区市”列
    if '设区市' in listTable.columns:
        listTable = listTable.drop(columns=['设区市'])

    # 提取电子监管号的前16位生成新列--电子监管号前16位--并挪动到第一列
    # (电子监管号前16位 电子监管号	合同编号 	合同名称	供应面积	约定（变更）动工时间)
    listTable = slice_colum_from_dataframe(listTable,
                                           '电子监管号',
                                           16,
                                           '电子监管号前16位')
    # print('提取电子监管号的前16位生成新列--电子监管号前16位--并挪动到第一列')
    # print(listTable)


    # 合并两个表---根据 电子监管号 进行合并
    # 电子监管号 实际管理区  设区市
    merged_table = pd.merge(listTable, epc2county2cityTable,
                            on='电子监管号', how='left')
    #print(merged_table)
    #把合并后的表中实际管理区列和设区市列挪动到前两列
    merged_table = move_column(merged_table, '实际管理区')
    merged_table = move_column(merged_table, '设区市')
    #设区市  实际管理区  电子监管号前16位 电子监管号	合同编号 	合同名称	供应面积	约定（变更）动工时间	实际动工时间	实际竣工时间	动工照片符合	动工许可符合	受让人	核实后实际管理区



    # 保存数据到Excel文件最后一个sheet上（新增的sheet）
    #save_to_excel(merged_table, url4List)
    return merged_table

# 获取获取清单数据
#url4CountyCode2CountyNameCity(行政区代码前六位 实际管理区 设区市)
#url4List 清单表(电子监管号	合同编号 	合同名称	供应面积)
def get_part21_list(url4CountyCode2CountyNameCity,sheetName4CountyCode2CountyNameCity,
             url4List,sheetName4List):
    url4CountyCode2CountyNameCity = fr"{url4CountyCode2CountyNameCity}"
    url4List = fr"{url4List}"

    # 获取Excel文件--(行政区代码前六位---实际管理区----设区市)
    #(行政区代码前六位---实际管理区----设区市)
    #(361130    婺源县    上饶市)
    countyNum2countyName2CityTable = read_countycode_2countyname_city(url4CountyCode2CountyNameCity,
                                                            sheet_name=sheetName4CountyCode2CountyNameCity)

    #清单表(电子监管号	合同编号 	合同名称	供应面积	约定（变更）动工时间)
    listTable = read_excel_to_dataframe(url4List, sheet_name=sheetName4List)
    listTable.columns = listTable.columns.str.strip()
    # 检查并删除“设区市”列
    if '设区市' in listTable.columns:
        listTable = listTable.drop(columns=['设区市'])

    # 提取电子监管号的前16位生成新列--电子监管号前16位--并挪动到第一列
    # (电子监管号前16位 电子监管号	合同编号 	合同名称	供应面积	约定（变更）动工时间)
    listTable = slice_colum_from_dataframe(listTable,
                                           '电子监管号',
                                           16,
                                           '电子监管号前16位')
    # print('提取电子监管号的前16位生成新列--电子监管号前16位--并挪动到第一列')
    # print(listTable)

    # 提取电子监管号的前6位生成新列--行政区代码前六位--并挪动到第一列
    #(行政区代码前六位 电子监管号	合同编号 	合同名称	供应面积)
    listTable = slice_colum_from_dataframe(listTable,
                                               '电子监管号',
                                               6,
                                               '行政区代码前六位')
    #print('提取电子监管号的前6位生成新列--行政区代码前六位--并挪动到第一列')
    #print(listTable)

    # 合并两个表---根据行政区代码前六位进行合并
    merged_table = pd.merge(listTable, countyNum2countyName2CityTable,
                            on='行政区代码前六位', how='left')
    #print(merged_table)
    #把合并后的表中实际管理区列和设区市列挪动到前两列
    merged_table = move_column(merged_table, '实际管理区')
    merged_table = move_column(merged_table, '设区市')



    # 保存数据到Excel文件最后一个sheet上（新增的sheet）
    #save_to_excel(merged_table, url4List)
    return merged_table

# column_names4Get需要保留的列名
# newcolumn_names4Mapping 列名映射字典
def part21_get_list_bycolumn(url4List,
                            sheetName4List,
                            column_names4Get,
                            newcolumn_names4Mapping):
    #读取表
    listTable = read_excel_to_dataframe(url4List, sheetName4List)
    listTable.columns = listTable.columns.str.strip()
    # 保留需要的列
    listTable = listTable[column_names4Get]
    # 重命名列
    listTable = listTable.rename(columns=newcolumn_names4Mapping)
    return listTable

#table_result_0spot1_df---电子监管号 合同编号	处置情况
#countyCode2CountyName2City1.闲置周报表格逻辑关系--行政区划代码对应(行政区代码前六位	实际管理区	设区市)
# table7_4all_contractlist_df '电子监管号', '合同编号', '土地坐落', '使用权人', '供应面积', '土地用途'
def part21_handle_result0spot1_table(table_result_0spot1_df,
                                     countyCode2CountyName2City,
                                     table7_4all_contractlist_df):

    # 提取电子监管号的前6位生成新列--行政区代码前六位--并挪动到第一列
    # (行政区代码前六位 电子监管号 合同编号	处置情况 )
    table_result_0spot1_df = slice_colum_from_dataframe(table_result_0spot1_df,
                                               '电子监管号',
                                               6,
                                               '行政区代码前六位')

    # 合并两个表---根据行政区代码前六位进行合并
    #table_result_0spot1_df---行政区代码前六位 电子监管号 合同编号	处置情况
    #countyCode2CountyName2City---行政区代码前六位	实际管理区	设区市
    table_result_0spot1_df = pd.merge(table_result_0spot1_df, countyCode2CountyName2City,
                            on='行政区代码前六位', how='left')

    table_result_0spot1_df = move_column(table_result_0spot1_df, '实际管理区')
    table_result_0spot1_df = move_column(table_result_0spot1_df, '设区市')
    table_result_0spot1_df = table_result_0spot1_df.drop(columns=['行政区代码前六位'])

    # 提取电子监管号的前6位生成新列--行政区代码前六位--并挪动到第一列
    # (电子监管号前16位 设区市 实际管理区 电子监管号 合同编号	处置情况 )
    table_result_0spot1_df = slice_colum_from_dataframe(table_result_0spot1_df,
                                                        '电子监管号',
                                                        16,
                                                        '电子监管号前16位')
    #table7_4all_contractlist_df(电子监管号前16位 电子监管号 合同编号 土地用途 土地坐落 使用权人 供应面积)
    table7_4all_contractlist_df = slice_colum_from_dataframe(table7_4all_contractlist_df,
                                                        '电子监管号',
                                                        16,
                                                        '电子监管号前16位')
    #table_result_0spot1_df--电子监管号前16位 设区市 实际管理区 电子监管号 合同编号	处置情况
    #table7_4all_contractlist_df--电子监管号前16位 电子监管号, 合同编号, 土地坐落, 使用权人, 供应面积, 土地用途
    #电子监管号前16位 设区市 实际管理区 电子监管号_x 合同编号_x	处置情况  电子监管号_y 合同编号_y  土地坐落 使用权人 供应面积 土地用途
    #0              1      2         3        4          5        6          7          8     9     10       11
    merged_df = pd.merge(table_result_0spot1_df, table7_4all_contractlist_df,
                            on='电子监管号前16位', how='left')
    #设区市 实际管理区 电子监管号_x 合同编号_x	处置情况  土地坐落 使用权人 供应面积 土地用途
    merged_df = merged_df.drop(columns=['电子监管号前16位','电子监管号_y','合同编号_y'])
    # 重命名列
    merged_df =  merged_df.rename(columns={
        '电子监管号_x': '电子监管号',
        '合同编号_x': '合同编号'
    })
    #设区市 实际管理区 电子监管号_x 合同编号_x	处置情况  土地坐落 使用权人 供应面积 土地用途
    merged_df = move_column_to_pre(merged_df, '土地用途')
    merged_df = move_column_to_pre(merged_df, '土地用途')
    merged_df = move_column_to_pre(merged_df, '土地用途')
    merged_df = move_column_to_pre(merged_df, '土地用途')
    merged_df = move_column_to_pre(merged_df, '土地用途')
    merged_df = move_column_to_pre(merged_df, '土地用途')
    # 设区市 实际管理区 土地用途 电子监管号 合同编号 处置情况   土地坐落 使用权人 供应面积
    merged_df = move_column_to_pre(merged_df, '土地坐落')
    merged_df = move_column_to_pre(merged_df, '土地坐落')
    merged_df = move_column_to_pre(merged_df, '土地坐落')
    # 设区市 实际管理区 土地用途 土地坐落 电子监管号 合同编号 处置情况  使用权人 供应面积
    merged_df = move_column_to_end(merged_df, '处置情况')
    # 设区市 实际管理区 土地用途 土地坐落 电子监管号 合同编号  使用权人 供应面积 处置情况
    return merged_df

#result4List1--设区市 实际管理区  电子监管号	合同编号  闲置土地类型
#table7_4all_contractlist_df --电子监管号 合同编号  土地坐落 使用权人 供应面积 土地用途
def part21_handle_result1_table(result4List1,table7_4all_contractlist_df):
    empty_epc4_result4List1  = result4List1[result4List1['电子监管号'].isnull()]
    not_empty_epc4_result4List1 = result4List1[result4List1['电子监管号'].notnull()]



    #empty_epc4_result4List1--设区市 实际管理区  电子监管号	合同编号  闲置土地类型
    #table7_4all_contractlist_df--电子监管号 合同编号  土地坐落 使用权人 供应面积 土地用途
    merged_df1 = pd.merge(empty_epc4_result4List1,table7_4all_contractlist_df,on='合同编号',how='left')
    #设区市 实际管理区  电子监管号_x	合同编号  闲置土地类型 电子监管号_y   土地坐落 使用权人 供应面积 土地用途
    merged_df1 = merged_df1.drop(columns=['电子监管号_y'])
    # 重命名列
    merged_df1 = merged_df1.rename(columns={
        '电子监管号_x': '电子监管号'
    })
    # 设区市 实际管理区  电子监管号 合同编号  闲置土地类型   土地坐落 使用权人 供应面积 土地用途
    merged_df1 = move_column_to_pre(merged_df1, '闲置土地类型')
    merged_df1 = move_column_to_pre(merged_df1, '闲置土地类型')
    # 设区市 实际管理区  闲置土地类型 电子监管号 合同编号     土地坐落 使用权人 供应面积 土地用途
    merged_df1 = move_column_to_pre(merged_df1, '土地用途')
    merged_df1 = move_column_to_pre(merged_df1, '土地用途')
    merged_df1 = move_column_to_pre(merged_df1, '土地用途')
    merged_df1 = move_column_to_pre(merged_df1, '土地用途')
    merged_df1 = move_column_to_pre(merged_df1, '土地用途')
    # 设区市 实际管理区  闲置土地类型 土地用途 电子监管号 合同编号   土地坐落 使用权人 供应面积
    merged_df1 = move_column_to_pre(merged_df1, '土地坐落')
    merged_df1 = move_column_to_pre(merged_df1, '土地坐落')
    # 设区市 实际管理区  闲置土地类型 土地用途 土地坐落 电子监管号 合同编号   使用权人 供应面积
    merged_df1['是否疑似政府平台公司用地'] = ''
    # 设区市 实际管理区  闲置土地类型 土地用途 土地坐落 电子监管号 合同编号   使用权人 供应面积 是否疑似政府平台公司用地
    merged_df1 = move_column_to_pre(merged_df1, '是否疑似政府平台公司用地')
    merged_df1 = move_column_to_pre(merged_df1, '是否疑似政府平台公司用地')
    merged_df1 = move_column_to_pre(merged_df1, '是否疑似政府平台公司用地')
    # 设区市 实际管理区  闲置土地类型 土地用途 土地坐落 电子监管号 是否疑似政府平台公司用地 合同编号   使用权人 供应面积
    merged_df1['地方反馈是否可处置'] = ''
    merged_df1['是否已开工'] = ''


    # 提取电子监管号的前16位生成新列--电子监管号前16位--并挪动到第一列
    # (电子监管号前16位 设区市 实际管理区  电子监管号	合同编号  闲置土地类型 )
    not_empty_epc4_result4List1 = slice_colum_from_dataframe(not_empty_epc4_result4List1,
                                                        '电子监管号',
                                                        16,
                                                        '电子监管号前16位')
    #table7_4all_contractlist_df(电子监管号前16位 电子监管号 合同编号 土地用途 土地坐落 使用权人 供应面积)
    table7_4all_contractlist_df = slice_colum_from_dataframe(table7_4all_contractlist_df,
                                                        '电子监管号',
                                                        16,
                                                        '电子监管号前16位')
    #not_empty_epc4_result4List1--电子监管号前16位 设区市 实际管理区  电子监管号	合同编号  闲置土地类型
    #table7_4all_contractlist_df--电子监管号前16位 电子监管号 合同编号  土地坐落 使用权人 供应面积 土地用途
    #电子监管号前16位 设区市 实际管理区  电子监管号_x	合同编号_x  闲置土地类型  电子监管号_y 合同编号_y  土地坐落 使用权人 供应面积 土地用途
    #0              1      2         3            4          5        6          7          8     9       10       11
    merged_df2 = pd.merge(not_empty_epc4_result4List1, table7_4all_contractlist_df,
                            on='电子监管号前16位', how='left')
    # 电子监管号前16位- 设区市 实际管理区  电子监管号_x	合同编号_x  闲置土地类型  电子监管号_y- 合同编号_y-  土地坐落 使用权人 供应面积 土地用途
    # 0               1      2         3            4          5        6          7          8     9     10       11
    merged_df2 = merged_df2.drop(columns=['电子监管号前16位','电子监管号_y','合同编号_y'])
    # 重命名列
    merged_df2 =  merged_df2.rename(columns={
        '电子监管号_x': '电子监管号',
        '合同编号_x': '合同编号'
    })
    # 设区市 实际管理区  电子监管号	合同编号  闲置土地类型  土地坐落 使用权人 供应面积  土地用途
    merged_df2 = move_column_to_pre(merged_df2, '闲置土地类型')
    merged_df2 = move_column_to_pre(merged_df2, '闲置土地类型')
    # 设区市 实际管理区 闲置土地类型  电子监管号 合同编号    土地坐落 使用权人 供应面积 土地用途
    merged_df2 = move_column_to_pre(merged_df2, '土地用途')
    merged_df2 = move_column_to_pre(merged_df2, '土地用途')
    merged_df2 = move_column_to_pre(merged_df2, '土地用途')
    merged_df2 = move_column_to_pre(merged_df2, '土地用途')
    merged_df2 = move_column_to_pre(merged_df2, '土地用途')
    # 设区市 实际管理区 闲置土地类型  土地用途 电子监管号	合同编号    土地坐落 使用权人 供应面积
    merged_df2 = move_column_to_pre(merged_df2, '土地坐落')
    merged_df2 = move_column_to_pre(merged_df2, '土地坐落')
    # 设区市 实际管理区 闲置土地类型  土地用途 土地坐落 电子监管号	合同编号   使用权人 供应面积
    merged_df2['是否疑似政府平台公司用地'] = ''
    # 设区市 实际管理区 闲置土地类型  土地用途 土地坐落 电子监管号	合同编号   使用权人 供应面积 是否疑似政府平台公司用地
    merged_df2 = move_column_to_pre(merged_df2, '是否疑似政府平台公司用地')
    merged_df2 = move_column_to_pre(merged_df2, '是否疑似政府平台公司用地')
    merged_df2 = move_column_to_pre(merged_df2, '是否疑似政府平台公司用地')
    # 设置区市 实际管理区 闲置土地类型  土地用途 土地坐落 电子监管号 是否疑似政府平台公司用地 合同编号   使用权人 供应面积
    merged_df2['地方反馈是否可处置'] = ''
    merged_df2['是否已开工'] = ''


    merged_df = pd.concat([merged_df1, merged_df2], ignore_index=True)
    merged_df = merged_df.sort_values(['设区市', '实际管理区'])
    merged_df['供应面积'] = merged_df['供应面积'] * 15
    merged_df['序号'] = range(1, len(merged_df) + 1)
    merged_df = move_column(merged_df, '序号')

    return merged_df